
#ifndef __LIST_H
#define __LIST_H


#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>


//1、设计数据结点
typedef struct 
{
	int x;
	int y;
	int direc;
	int bmpBuf[12*12];
	int socketFd;
	struct sockaddr_in addr;
}ElemType_t;//该数据类型可重定义为任意类型

typedef struct node{
	ElemType_t data;//数据域
	struct node *prev; //存储的是上一个结点的地址
	struct node *next; //存储的是下一个结点的地址
}Node_t;

//2、设计链表的管理结构体---头节点
typedef struct list{
	Node_t *head;//存储链表的数据首结点
	Node_t *tail;//存储链表的数据尾结点
	int nodeNumber;//存储结点的数量
}list_t;

//申请一个新结点并且初始化，把新结点的地址返回
Node_t* new_node(struct list*listHead,ElemType_t inputData);

//创建一条链表
struct list* create_list();

//尾插法 
//3、新建一个结点 插入到链表中
int insert_nodeToList_tail(struct list*listHead,ElemType_t inputData);

//头插法 
//3、新建一个结点 插入到链表中
int insert_nodeToList_head(struct list*listHead,ElemType_t inputData);

//修改 ----------------
//5、查找某个指定的数据 是否在链表中  -
bool find_nodeToList(struct list*listHead,ElemType_t findData);


//修改 ----------------
//6、修改
bool update_nodeToList(struct list*listHead,ElemType_t srcData,ElemType_t updata); //将10  改成 100

//修改 ----------------
//删除  
//7、从链表中 删除值为delData的结点
bool delete_nodeToList(struct list*listHead,ElemType_t delData);

//尾删法
bool delete_tail(struct list*listHead);

//摧毁链表
void destroy_list(list_t* listHead);



#endif